package com.pujida.biandian.common.core.controller;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pujida.biandian.common.core.domain.R;
import com.pujida.biandian.common.core.domain.model.LoginUser;
import com.pujida.biandian.common.core.page.TableDataInfo;
import com.pujida.biandian.common.helper.LoginHelper;
import com.pujida.biandian.common.utils.BeanCopyUtils;
import com.pujida.biandian.common.utils.StringUtils;

import java.util.List;

/**
 * web层通用数据处理
 *
 * @author Lion Li
 */
public class BaseController {

    /**
     * 转换
     *
     * @param list   列表
     * @param target 目标
     * @return {@link List}<{@link V}>
     */
    protected <V> List<V> convert(List list, Class<V> target) {
        return BeanUtil.copyToList(list, target);
    }

    /**
     * 转换
     *
     * @param source 源
     * @param target 目标
     * @return {@link V}
     */
    protected <V> V convert(Object source, Class<V> target) {
        return BeanUtil.copyProperties(source, target);
    }

    /**
     * 获取数据表
     *
     * @param pageData 原始分页数据
     * @param voClass  需要转换的vo类
     * @return {@link TableDataInfo}<{@link V}>
     */
    protected <V> TableDataInfo<V> getDataTable(IPage pageData, Class<V> voClass) {
        if(voClass != null) {
            IPage<V> voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal());
            if (CollUtil.isNotEmpty(pageData.getRecords())) {
                List<V> list = BeanCopyUtils.copyList(pageData.getRecords(), voClass);
                voPage.setRecords(list);
            }
            return TableDataInfo.build(voPage);
        }
        return TableDataInfo.build(pageData);
    }

    /**
     * 获取数据表
     *
     * @param pageData 页面数据
     * @return {@link TableDataInfo}<{@link V}>
     */
    protected <V> TableDataInfo<V> getDataTable(IPage<V> pageData) {
        return getDataTable(pageData, null);
    }

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    protected R<Void> toAjax(int rows) {
        return rows > 0 ? R.ok() : R.fail();
    }

    /**
     * 响应返回结果
     *
     * @param result 结果
     * @return 操作结果
     */
    protected R<Void> toAjax(boolean result) {
        return result ? R.ok() : R.fail();
    }

    /**
     * 页面跳转
     */
    public String redirect(String url) {
        return StringUtils.format("redirect:{}", url);
    }

    /**
     * 获取用户缓存信息
     */
    public LoginUser getLoginUser() {
        return LoginHelper.getLoginUser();
    }

    /**
     * 获取登录用户id
     */
    public Long getUserId() {
        return LoginHelper.getUserId();
    }

    /**
     * 获取登录部门id
     */
    public Long getDeptId() {
        return LoginHelper.getDeptId();
    }

    /**
     * 获取登录用户名
     */
    public String getUsername() {
        return LoginHelper.getUsername();
    }
}
